home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok72.lha / while-Interpreter / Source / QuadBerechneQuadRek.MOD < prev    next >
Text File  |  1993-08-15  |  5KB  |  142 lines

  1. (******************************
  2.  * Programm von Dieter Seidel *
  3.  *  Eingegeben am 14.11.1991  *
  4.  ******************************)
  5.  
  6. IMPLEMENTATION MODULE QuadBerechneQuad;
  7.  
  8. FROM InOut           IMPORT WriteCard, WriteLn, Write, WriteString;
  9. FROM QuadLese        IMPORT MaxBefehle, MaxQuad, MaxZeile,
  10.                             arrZeile, QuadZeile, arrQuad, arrList;
  11. FROM QuadHoleBefehle IMPORT HoleZuweisung, HoleSchleife;
  12.  
  13.  
  14. PROCEDURE BerechneQuad(    BefehlsListe : arrList;
  15.                        VAR QuadListe    : arrQuad);
  16. VAR i,
  17.     whileCounter : CARDINAL;
  18.     whileZaehler : ARRAY [1..MaxBefehle] OF CARDINAL;
  19.     beginZaehler : ARRAY [1..MaxBefehle] OF BOOLEAN;
  20.  
  21.  
  22.   PROCEDURE BerechneQuadRek(    BefehlsListe : arrList;
  23.                             VAR QuadListe    : arrQuad;
  24.                             VAR Zeiger       : CARDINAL;
  25.                                 Zaehler      : CARDINAL)           : CARDINAL;
  26.   VAR ZaehlerAlt : CARDINAL;
  27.   BEGIN
  28. (**)
  29.     IF Zaehler > 20 THEN RETURN Zaehler; END;
  30. (**)
  31.     IF BefehlsListe[Zeiger] = "b" THEN
  32.       INC(Zeiger);
  33.       Zaehler:=BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
  34.     END;
  35.   
  36.     IF BefehlsListe[Zeiger] = "X" THEN
  37.       HoleZuweisung(QuadListe[Zaehler].Befehl,BefehlsListe,Zeiger);
  38.       QuadListe[Zaehler].Zeile:=Zaehler;
  39.       QuadListe[Zaehler].IFzeile:=Zaehler+1;
  40.       QuadListe[Zaehler].ELSEzeile:=Zaehler+1;
  41.       RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler+1);
  42.     END;
  43.  
  44.     IF BefehlsListe[Zeiger] = "w" THEN
  45.       INC(Zeiger);
  46.       HoleSchleife(QuadListe[Zaehler].Befehl,BefehlsListe,Zeiger);
  47.       QuadListe[Zaehler].Zeile:=Zaehler;
  48.       QuadListe[Zaehler].IFzeile:=Zaehler+1;
  49.       QuadListe[Zaehler].ELSEzeile:=Zaehler+2;
  50.       ZaehlerAlt:=Zaehler;
  51.       INC(Zaehler);
  52.       
  53.       IF BefehlsListe[Zeiger] = "X" THEN
  54.         HoleZuweisung(QuadListe[Zaehler].Befehl,BefehlsListe,Zeiger);
  55.         QuadListe[Zaehler].Zeile:=Zaehler;
  56.         QuadListe[Zaehler].IFzeile:=ZaehlerAlt;
  57.         QuadListe[Zaehler].ELSEzeile:=ZaehlerAlt;
  58.         IF whileCounter # 0 THEN
  59.           IF beginZaehler[whileCounter] THEN
  60.             
  61.             RETURN Zaehler+1;
  62.           ELSE
  63.             QuadListe[ZaehlerAlt].ELSEzeile:=whileZaehler[whileCounter];
  64. (*          DEC(whileCounter);*)
  65.             RETURN Zaehler+1;
  66.           END;
  67.         ELSE
  68.           RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler+1);
  69.         END;
  70.       ELSE
  71.         IF BefehlsListe[Zeiger] = "w" THEN
  72.           INC(whileCounter);
  73.           whileZaehler[whileCounter]:=ZaehlerAlt;
  74.           beginZaehler[whileCounter]:=FALSE;
  75.           Zaehler:=BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
  76.           
  77.           IF whileCounter # 0 THEN
  78.             DEC(whileCounter);
  79.             IF NOT(beginZaehler[whileCounter]) THEN
  80.               RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler+1);
  81.             ELSE
  82.               QuadListe[ZaehlerAlt].ELSEzeile:=whileZaehler[whileCounter];
  83.               RETURN Zaehler+1;
  84.             END;
  85.           ELSE
  86.             QuadListe[ZaehlerAlt].ELSEzeile:=Zaehler;
  87.             RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
  88.           END;
  89.         ELSE
  90.           IF BefehlsListe[Zeiger] = "b" THEN
  91.             INC(whileCounter);
  92.             whileZaehler[whileCounter]:=ZaehlerAlt;
  93.             beginZaehler[whileCounter]:=TRUE;
  94.             INC(Zeiger);
  95.             Zaehler:=BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
  96.             QuadListe[ZaehlerAlt].ELSEzeile:=Zaehler;
  97.             DEC(whileCounter);
  98.             RETURN BerechneQuadRek(BefehlsListe,QuadListe,Zeiger,Zaehler);
  99.           ELSE
  100.             WriteLn;
  101.             WriteString("Fehler in BerechneQuadRek!!!");
  102.             WriteLn;
  103.             HALT;
  104.           END;
  105.         END;
  106.         RETURN Zaehler;
  107.       END;
  108.     END;
  109.   
  110.     IF BefehlsListe[Zeiger] = "e" THEN
  111.       IF beginZaehler[whileCounter] THEN
  112.         QuadListe[Zaehler-1].IFzeile:=whileZaehler[whileCounter];
  113.         QuadListe[Zaehler-1].ELSEzeile:=whileZaehler[whileCounter];
  114.         beginZaehler[whileCounter]:=FALSE;
  115.       END;
  116.       INC(Zeiger);
  117.       IF BefehlsListe[Zeiger] = ";" THEN INC(Zeiger) END;
  118.       RETURN Zaehler;
  119.     END;
  120.   
  121.     WriteLn;
  122.     WriteString("Fehler in BerechneQuadRek!!!  ");WriteCard(Zaehler,5);
  123.     WriteLn;
  124. (*  HALT;*)
  125.     RETURN Zaehler;
  126.   END BerechneQuadRek;
  127.  
  128.  
  129. BEGIN                      (* BerechneQuad *)
  130.   i:=1;
  131.   whileCounter:=0;
  132.   i:=BerechneQuadRek(BefehlsListe,QuadListe,i,1);
  133.   QuadListe[i].Zeile:=0;
  134.   QuadListe[i].IFzeile:=0;
  135.   QuadListe[i].ELSEzeile:=0;
  136.   QuadListe[i].Befehl:="";
  137. END BerechneQuad;
  138.  
  139.  
  140. END QuadBerechneQuad.
  141.  
  142.